/*
 *   哈希值：是一个十进制的整数，有系统随机给出（就是对象的的地址值，是一个逻辑地址，不是实际的物理地址）
 *  在Object类中有一个方法，可以获取对象的哈希地址
 * int hashcode() 返回对象的哈希值
 * 源码：
 *   pulic native int hashcode();
 *   native表示该方法调用的是本地操作系统的方法
 *
 * */
public class HashCode01 {
    public static void main(String[] args) {
        Person s1 = new Person();
        int i = s1.hashCode();
        System.out.println(i);  //2001049719
        System.out.println(s1); //Students@77459877

        /*
         * 直接输出对象使用了toString方法
         *           return getClass().getName() + "@" + Integer.toHexString(hashCode());
         * */

        Person s2 = new Person();
        int i1 = s2.hashCode();
        System.out.println(i1); //1528902577
        System.out.println(s2); //Students@5b2133b1

        //当重写了students中的hashcode方法之后，虽然hashcode值一致，但是还是两个不同的对象
        System.out.println(s1.equals(s2));//false

        String string1 = new String("abc");
        String string2 = new String("abc");
        System.out.println(string1.hashCode());//96354
        System.out.println(string2.hashCode());//96354
        System.out.println(string1.equals(string2));//比较内容
        System.out.println(string1 == string2);//比较地址

        System.out.println("重地".hashCode());//1179395
        System.out.println("通话".hashCode());//1179395
    }
}
